
#pragma once
namespace GSE
{
	template < class T , bool Key = false>
	struct sql_data
	{
	public:
		typedef typename sql_data<T>	type;
		typedef typename T				value_type;

		sql_data():m_dirty(false){}
		explicit sql_data( const T  m, bool is_dirty = false):m_dirty(is_dirty), m_value(m) {}

		template < class T >
		sql_data ( const sql_data<T> & m )
		{
			*this = m;
		}

		sql_data<T> & operator = ( const T  m )
		{
			if ( m != m_value )
			{
				m_dirty = true;
				m_value = m;
			}
			return *this;
		}

		void set_dirty(bool b)
		{
			m_dirty = b;
		}

		bool is_dirty()
		{
			return m_dirty;
		}

		const T value()
		{
			return m_value;
		}

	private:
		T m_value;
		bool m_dirty;
	};



	template < class T >
	struct sql_data<T,true>
	{
	public:
		typedef typename sql_data<T>	type;
		typedef typename T				value_type;

		explicit sql_data( const T  m ): m_value(m) {}

		const T value()
		{
			return m_value;
		}

	private:
		T m_value;
	};
}